package kotlindemo.com.kotlindemo

import kotlinx.coroutines.*

//接着练习协程
fun main() {
    //------------------统一取消协程作用域------------------
    val job = Job()
    val scope = CoroutineScope(job)
    scope.launch {
        //处理具体的逻辑
    }
    job.cancel()
    //------launch函数中只能执行一段逻辑，却不能获取到执行结果------------------
    //使用async函数搭配Deferred对象的await方法，可以获取代码执行结果
    //调用async函数之后，代码块中的代码会立即执行，调用await方法时，如果代码块中的代码还没有执行完，
    // 那么await方法会将协程阻塞，知道可以获得async的执行结果
    runBlocking {
        val result = async { 5 + 5 }.await()
        println(result)
    }

    //-----------------withContext函数---------------
    //withContext函数与上述async函数作用差不多，区别就是要给当前协程指定一个具体的运行线程，
    //线程参数有三种可选：Dispatchers.Default Dispatchers.IO Dispatchers.Main
    runBlocking {
        val result= withContext(Dispatchers.Default){
            5+5
        }
        println(result)
    }
}